#include <iostream>

using namespace std;

const int N = 1e5 + 10;

//思路分析：
//1)可能的结果：0，1，2
//2)枚举第一列的第一个格子，有没有放雷
//3)需要空出一个位置，从下标1开始填
//	a[i] = b[i - 1] - a[i - 2] - a[i - 1]

//注意：很容易漏判b数组中最后一个格子的数值是否正确
//也就是需要计算a[n + 1]位置的雷数量是否等于0，如果不等于0，说明缺地雷

int n;
int a[N], b[N]; // a：推导地雷 b：统计雷的数量
int ret;

int check(int x)
{
	a[1] = x;
	int flag = 1;
	for(int i = 2; i <= n + 1; i++)
	{
		a[i] = b[i - 1] - a[i - 2] - a[i - 1];
		if(a[i] < 0 || a[i] > 3) return 0;
	}

	return a[n + 1] == 0;
}

int main()
{
	cin >> n;
	for(int i = 1; i <= n; i++) cin >> b[i];

	ret += check(1); // a[1] 放地雷
	ret += check(0); // a[1] 不放地雷

	cout << ret << endl;

	return 0;
}


